using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

/// <summary>
/// 开始界面UI控制器
/// 处理开始游戏和退出游戏的功能
/// </summary>
public class StartMenuUI : MonoBehaviour
{
    [Header("场景设置")]
    [Tooltip("游戏场景的名称，需要在Build Settings中添加该场景")]
    [SerializeField] private string gameSceneName = "game";

    [Header("UI按钮")]
    [Tooltip("开始游戏按钮，需要在Inspector中拖拽赋值")]
    [SerializeField] private Button startButton;
    [Tooltip("退出游戏按钮，需要在Inspector中拖拽赋值")]
    [SerializeField] private Button quitButton;

    /// <summary>
    /// 初始化按钮事件
    /// </summary>
    private void Start()
    {
        // 绑定按钮点击事件
        if (startButton != null)
            startButton.onClick.AddListener(OnStartButtonClicked);

        if (quitButton != null)
            quitButton.onClick.AddListener(OnQuitButtonClicked);
        else
            Debug.LogWarning("退出按钮未赋值，请在Inspector中设置");
    }

    /// <summary>
    /// 开始游戏按钮点击事件处理
    /// 加载游戏场景
    /// </summary>
    private void OnStartButtonClicked()
    {
        if (string.IsNullOrEmpty(gameSceneName))
        {
            Debug.LogError("游戏场景名称未设置，请在Inspector中指定游戏场景名称");
            return;
        }

        // 加载游戏场景
        SceneManager.LoadScene(gameSceneName);
    }

    /// <summary>
    /// 退出游戏按钮点击事件处理
    /// </summary>
    private void OnQuitButtonClicked()
    {
        // 在编辑器中停止播放，在实际游戏中退出应用
#if UNITY_EDITOR
        UnityEditor.EditorApplication.isPlaying = false;
#else
        Application.Quit();
#endif
    }

    /// <summary>
    /// 编辑器模式下验证参数
    /// </summary>
    private void OnValidate()
    {
        if (string.IsNullOrEmpty(gameSceneName))
            Debug.LogWarning("StartMenuUI: 游戏场景名称未设置，请在Inspector中指定");
    }
}

/* 使用说明:
1. 将此脚本挂载到开始界面的UI画布(Canvas)或空物体上
2. 在Inspector面板中设置以下参数:
   - Game Scene Name: 输入游戏场景的名称(需在Build Settings中添加该场景)
   - Start Button: 拖拽开始游戏按钮到该字段
   - Quit Button: 拖拽退出游戏按钮到该字段
3. 确保在Build Settings中添加了游戏场景

功能说明:
- 点击开始按钮: 加载指定的游戏场景
- 点击退出按钮: 在编辑器中停止播放，在发布版本中退出应用
- 包含参数验证，未设置必要参数时会在控制台显示警告
*/